RSA 暗号
RSA暗号の仕組みと安全性・具体例 | 高校数学の美しい物語
用語
公開錠🔓
一般的な専門用語は公開鍵だが公開錠🔓の方がメタファーとして良いと思う
漢字が潰れて錠と鍵の違いが一瞬見分けられないので絵文字を追加する
秘密鍵🔑
一般的な専門用語も秘密鍵
漢字が潰れて~
アルゴリズム
受信側
1. 大きな素数$ p,$ qを生成、$ n=pqとする
$ nから$ p,$ qを求めるのは難しい
2. $ (p-1)(q-1)と互いに素な整数$ lを取ってくる
3. $ lk \equiv 1\ {\rm mod}\ (p-1)(q-1)となる$ kを取ってくる
証明1 RSA 暗号#64d95312ed60e600007e1b9a
4.
$ nと$ lを公開する (公開錠🔓)
$ kは公開しない (秘密鍵🔑)
送信側
1. 送りたいメッセージ$ mは$ n未満の正の整数とする
2. 公開錠🔓$ lを用いて暗号文$ C=m^{l}\ {\rm mod}\ n を計算して送る
受信側
$ m=C^{k}\ {\rm mod}\ nが成立するので秘密鍵🔑$ kを用いて複合できる
証明2 RSA 暗号#64d955bded60e600007e1baa
補足
暗号文$ Cと公開錠🔓$ n,$ lから$ mを復元することは難しいと信じられている
今まで無数の攻撃が加えられ、破られていない実績があるので信じられている
小さい数での例
受信側
1. 素数$ p:=7,$ q:=13を生成、$ n=pq:=91とする
2. $ (p-1)(q-1)=6\times12=72と互いに素な整数$ l:=67を取ってくる
3. $ lk \equiv 1\ {\rm mod}\ (p-1)(q-1)となる$ kを取ってくる
Fermat の小定理より$ 67^{72-1}\equiv1\ {\rm mod}\ 72なので、
$ k=67^{\rm 70}\ {\rm mod}\ 72=43
4.
$ n=91と$ l=67を公開する (公開錠🔓)
$ k=43は公開しない (秘密鍵🔑)
送信側
1. 送りたいメッセージ$ m=63は$ n=91未満の正の整数とする
2. 公開錠🔓を用いて暗号文$ C=m^{l}\ {\rm mod}\ n=63^{67}\ {\rm mod}\ 91=28 を計算して送る
受信側
$ m=C^{k}\ {\rm mod}\ n=28^{43}\ {\rm mod}\ 91=63が成立するので複合できる
やってみた体感
$ p,$ q,$ lは自由に選べるのだが、適切な物を選ばないと周期が短くなって攻撃が容易になる可能性がある
多分他の条件もついているはず
周期の短さで候補を絞れないように選ぶことはできるか?
つまり周期を最大の $ nとか$ (p-1)(q-1)にできないか?
できない場合、周期の中から平文っぽい物を探す攻撃方法が使えてしまう。
「平文っぽさ」をどう計算するかは別の問題になるが
ホントか?周期は鍵長の指数オーダーぐらいになるぞ
そこそこ大きめの周期になるように選んでおけば心配はいらないのでは
$ l=(p-1)(q-1)-1にすると取り敢えず$ (p-1)(q-1)と互いに素にすることはできるが、$ k=lになってしまい、公開鍵と秘密鍵が一致してバレる間抜けになる
実際は平文に乱数をくっつけたものを暗号化する
同じ平文を暗号化したものがあれば暗号解読のヒントになるため
小さい$ mに対しては容易に解読できてしまうため
証明1
$ lk \equiv 1\ {\rm mod}\ (p-1)(q-1)となる$ kを取ってこれることの証明
$ lは$ (p-1)(q-1)と互いに素になるように決めたので、
Fermat の小定理より
$ 1\equiv l^{(p-1)(q-1)-1}\mod (p-1)(q-1)
$ \equiv l\times l^{(p-1)(q-1)-2}\mod (p-1)(q-1)
$ \therefore k=l^{(p-1)(q-1)-2}\ {\rm mod}\ (p-1)(q-1)とすればよい
なお、$ lk \equiv 1\ {\rm mod}\ (p-1)(q-1)となる$ kは一意に定まる
$ lと$ (p-1)(q-1)が互いに素なため、
$ 0,l,2l,3l,\cdots,\{(p-1)(q-1)-1\}lを$ (p-1)(q-1)で割ったあまりはすべて異なるため
背理法の意味といろいろな例 | 高校数学の美しい物語
証明2
$ m=C^{k}\ {\rm mod}\ nが成立するので秘密鍵🔑$ kを用いて複合できることの証明
$ C=m^l\ {\rm mod}\ nなので、$ m\equiv m^{lk}\ {\rm mod}\ n を示す
$ n=pqより$ m\equiv m^{lk}\ {\rm mod}\ pを示せばよい
$ qについては対称性から同様のことが言える
$ m\equiv 0\ {\rm mod}\ pのとき:$ m\equiv m^{lk}\ {\rm mod}\ nは言える
$ m\not\equiv 0\ {\rm mod}\ pのとき:
$ lk \equiv 1\ {\rm mod}\ (p-1)(q-1)となるようにしているので
$ lk=1+(p-1)N
よってFermat の小定理より
$ m^{lk}\equiv m\cdot(m^{p-1})^N\equiv m \mod p
気になる
RSA 暗号は素因数分解の困難性の仮定に基づいている
P=NP 問題が肯定的に解決されると RSA が素早く解読されてマズイみたいな言説があるが、問題はそこじゃない
P=NP 問題と関係ない所で RSA 暗号がマズイことになり得る
素因数分解が NP 完全かどうかの証明が無いので、素因数分解が実は簡単ということがバレて P=NP 問題は未解決のままということもある
この場合も RSA 暗号が解読されるためマズイ
そもそもRSA 暗号が素因数分解と同値な安全性を持つのかもわかっていない
素因数分解は解けないけどRSA 暗号は解けるアルゴリズムが開発されてマズイことになる可能性もある
P=NP 問題が肯定的に解決されても別にいい
逆に P=NP 問題が肯定的に解決されたとしても、アルゴリズムの存在のみが示されて、構成法が分からない可能性もある
この場合は RSA 暗号は危険にさらされない
アルゴリズムが構成できたとしても多項式の指数がデカすぎるとソレはソレで RSA 暗号は危険にさらされない